import java.util.Iterator;
import java.util.Vector;


public abstract class Deelname {

	protected double score;
	protected Vector<Kaart> kaarten;
	protected int hand = 1;
	
	/**
	 * Constructor
	 * maakt een Vector van kaarten aan
	 *
	 */
	public Deelname(){
		kaarten = new Vector<Kaart>();
	}
	
	public abstract void wint(double d);
	
	public abstract void verliest(double d);
	
	/**
	 * Voegt een kaart toe aan de Vector van kaarten
	 * @param k
	 */
	public void addKaart(Kaart k){
		kaarten.add(k);
	}
	
	/**
	 * Haalt de laatse kaart uit de Vector en returned deze
	 * zodat hij gebruikt kan worden in de volgende spelerdeelname
	 * @return kaart
	 */
	public Kaart splitKaart(){
		Kaart k = kaarten.lastElement();
		kaarten.remove(k);
		return k;
	}
	
	/**
	 * Loopt de kaarten door en kijkt hoeveel punten ze waard zijn
	 * en kijkt ook of de Aas 1 of 11 moet zijn.
	 * @return punten
	 */
	public int getPunten(){
		int punten = 0;
		int aantalAzen = 0;
		for (Iterator<Kaart> i = kaarten.iterator(); i.hasNext();){
			Kaart k = i.next();
			if (k.getPunten() == 11){
				aantalAzen++;
			}else{
				punten += k.getPunten();
			}
		}
		switch (aantalAzen){
			case 1: if (punten + 11 < 22)punten += 11;else punten+=1;break;
			case 2: if (punten + 12 < 22)punten += 12; else punten+=2;break;
			case 3: if (punten + 13 < 22)punten += 13; else punten+=3;break;
			}
		return punten;
	}
	
	public double getScore(){
		return score;
	}
	public String getNaam(){
		return "De Dealer";
	}
	public void checkBlackJack() throws BlackJackException{
		int aantal = 0;
		int blackjack = 0;
		for (Iterator<Kaart> i = kaarten.iterator(); i.hasNext();){
			Kaart k = i.next();
			blackjack += k.getPunten();
			aantal++;
		}
		if (blackjack ==21 && aantal == 2){
			throw new BlackJackException("BlackJack");
		}
		
	}
	public boolean checkSplit(){
		if (kaarten.get(1).getNaam().equals(kaarten.get(0).getNaam())){
			return true;
		}else{
			return false;
		}
	}
	public int getHand(){
		return hand;
	}
}
